Vil*_*ger 4 sql t-sql sql-server sql-server-2008
SQL不是我的强项之一.我有一个SQL Server 2008数据库.此数据库具有一个存储过程,该过程接收八个int参数.为了保持这个问题的重点,我将使用这些参数之一作为参考:
@isActive int
Run Code Online (Sandbox Code Playgroud)
这些int参数中的每一个都是-1,0或1. -1表示"未知"或"不关心".基本上,我需要查询一个表,如果int参数是非-1,我需要在我的WHERE子句中考虑它.因为有8个int参数,所以IF-ELSE语句似乎不是一个好主意.与此同时,我不知道怎么做呢?
如果参数不等于值,在SQL中是否有一种优雅的方式来添加WHERE条件?
谢谢!
动态搜索条件的最佳来源:
Erland Sommarskog在T-SQL中的动态搜索条件
如果可以使用索引,对于如何执行此操作有很多微妙的含义.如果您使用的是SQL Server 2008的正确版本,则可以添加OPTION (RECOMPILE)
到查询中,并在运行时将局部变量的值用于优化.
考虑一下,OPTION (RECOMPILE)
将采用这个代码(没有索引可以用于这个混乱的OR
s):
WHERE
(@search1 IS NULL or Column1=@Search1)
AND (@search2 IS NULL or Column2=@Search2)
AND (@search3 IS NULL or Column3=@Search3)
Run Code Online (Sandbox Code Playgroud)
并在运行时优化它(假设只有@ Search2传入一个值):
WHERE
Column2=@Search2
Run Code Online (Sandbox Code Playgroud)
并且可以使用索引(如果在Column2上定义了一个索引)